import axios from "axios";
import { ElMessage } from "element-plus";
// 如果是开发环境，不设置 baseURL，这样请求将通过 Vite 的代理
const baseURL = "http://erpapi.carhousekeep.com/admin"; //正式
// const baseURL = "http://testerpapi.carhousekeep.com/admin"; // 测试
// const baseURL = "http://localhost:9501/admin"; // 本地
const instance = axios.create({
   baseURL,
   timeout: 10000,
   // 请求头
   headers: {
      "Content-Type": "application/json",
   },
});
// 请求拦截器 前端向后端发送请求【未到后端】
instance.interceptors.request.use(
   (config) => {
      // 处理公共接口，去掉admin路径
      if (config.customStatus === "pub") {
         // console.log("检测到公共接口，原baseURL:", config.baseURL);
         config.baseURL = config.baseURL.replace(/\/admin$/, "");
         // console.log("去除admin后的baseURL:", config.baseURL);
      }


      // 这里可以添加一些通用的请求逻辑，例如添加 token
      const token = localStorage.getItem("token");
      if (token) {
         config.headers["Authorization"] = `Bearer ${token}`;
      }
      return config;
   },
   (error) => {
      // 请求错误时的统一处理
      console.error("请求错误:", error);
      return Promise.reject(error);
   }
);
// 响应拦截器   后端向前端返回数据
instance.interceptors.response.use(
   (response) => {
      const { data } = response;

 
      // 可以根据后端的返回数据结构进行统一处理
      //检查响应数据中的 success 字段，如果为 false，则显示错误消息并根据错误码（如 10001）处理特定逻辑（如 token 失效时跳转到登录页面）并清空用户信息。
      if (!data.status) {
         ElMessage.error(data.message);
         // 处理自定义错误，如token失效等
         if (data.code == 211 || data.code == 210) {
            setTimeout(() => {
               localStorage.removeItem("token");
               localStorage.removeItem("userInfo");
               window.location.href = "/login";
               setTimeout(() => {
                  window.location.reload();
               }, 100);
            }, 2000);
         }
         return Promise.reject(data.msg);
      }



      return data; // 正常返回响应数据
   },
   (error) => {
      console.log(error, "errorxxxx");
      // 统一处理响应错误，如网络异常、服务器错误等
      ElMessage.error(error.response?.data?.message || error.message || "未知错误");

      if (error.response?.data?.code == 211 || error.response?.data?.code == 210 || error.response?.data?.code == 212) {
         setTimeout(() => {
            localStorage.removeItem("token");
            localStorage.removeItem("userInfo");
            window.location.href = "/login";
         }, 1500);
      }

      return Promise.reject(error.response || error.message);
   }
);
// 封装HTTP请求方法
const http = {
   baseURL,
   get(url, params, config = {}) {
      return instance({
         url,
         method: "GET",
         params,
         ...config, // 可以传入额外的配置参数
      });
   },
   post(url, data, customBaseURL = null, config = {}) {
      return instance({
         url,
         method: "POST",
         data,
         baseURL: customBaseURL || baseURL,
         ...config,
      });
   },
   delete(url, data, config = {}) {
      return instance({
         url,
         method: "DELETE",
         data,
         ...config,
      });
   },
   put(url, data, config = {}) {
      return instance({
         url,
         method: "PUT",
         data,
         ...config,
      });
   },
   // 其他自定义方法
   patch(url, data, config = {}) {
      return instance({
         url,
         method: "PATCH",
         data,
         ...config,
      });
   },
};

export default http;
